@@ -251,7 +251,10 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):  | 
            ||
| 251 | 251 | 
                from utils.redis.rimage import set_image_data  | 
            
| 252 | 252 | 
                     file_type = request.POST.get('file_type', '')
               | 
            
| 253 | 253 | 
                     upload_qiniu = request.POST.get('upload_qiniu', '')
               | 
            
| 254 | 
                -    compress = bool(request.POST.get('compress', 0))
               | 
            |
| 254 | 
                +    compress = bool(request.POST.get('compress', 1))
               | 
            |
| 255 | 
                +    thumbnail = bool(request.POST.get('thumbnail', 1))
               | 
            |
| 256 | 
                +    thumbnailw = int(request.POST.get('thumbnailw') or request.POST.get('w') or 1080)
               | 
            |
| 257 | 
                +    thumbnailh = int(request.POST.get('thumbnailh') or request.POST.get('h') or 720)
               | 
            |
| 255 | 258 | 
                 | 
            
| 256 | 259 | 
                if file_type == 'logfile':  | 
            
| 257 | 260 | 
                         optor_id = request.POST.get('optor_id', '')
               | 
            
                @@ -268,7 +271,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):  | 
            ||
| 268 | 271 | 
                         height = request.POST.get('height', 0)
               | 
            
| 269 | 272 | 
                         file = request.FILES.get('file', '')
               | 
            
| 270 | 273 | 
                         # upload_file_path('media/' + file_path, file_path, bucket='tamron')
               | 
            
| 271 | 
                - upload_file_req(file, file_path, bucket='tamron', compress=compress)  | 
            |
| 274 | 
                + file_path = upload_file_req(file, file_path, bucket='tamron', compress=compress, thumbnail=thumbnail, thumbnailw=thumbnailw, thumbnailh=thumbnailh)  | 
            |
| 272 | 275 | 
                file_url = qiniu_file_url(file_path, bucket='tamron')  | 
            
| 273 | 276 | 
                 | 
            
| 274 | 277 | 
                set_image_data(file, file_path=file_path, file_url=file_url)  | 
            
                @@ -276,18 +279,20 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):  | 
            ||
| 276 | 279 | 
                         return {
               | 
            
| 277 | 280 | 
                'width': width,  | 
            
| 278 | 281 | 
                'height': height,  | 
            
| 282 | 
                + 'file_path': file_path,  | 
            |
| 279 | 283 | 
                'file_url': file_url,  | 
            
| 280 | 284 | 
                }  | 
            
| 281 | 285 | 
                 | 
            
| 282 | 286 | 
                elif file_type == 'member_activity' or (file_type and upload_qiniu):  | 
            
| 283 | 287 | 
                         file = request.FILES.get('file', '')
               | 
            
| 284 | 288 | 
                         # upload_file_path('media/' + file_path, file_path, bucket='tamron')
               | 
            
| 285 | 
                - upload_file_req(file, file_path, bucket='tamron', compress=compress)  | 
            |
| 289 | 
                + file_path = upload_file_req(file, file_path, bucket='tamron', compress=compress, thumbnail=thumbnail, thumbnailw=thumbnailw, thumbnailh=thumbnailh)  | 
            |
| 286 | 290 | 
                file_url = qiniu_file_url(file_path, bucket='tamron')  | 
            
| 287 | 291 | 
                 | 
            
| 288 | 292 | 
                set_image_data(file, file_path=file_path, file_url=file_url)  | 
            
| 289 | 293 | 
                 | 
            
| 290 | 294 | 
                         return {
               | 
            
| 295 | 
                + 'file_path': file_path,  | 
            |
| 291 | 296 | 
                'file_url': file_url,  | 
            
| 292 | 297 | 
                }  | 
            
| 293 | 298 | 
                 | 
            
                @@ -1,8 +1,13 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +import re  | 
            |
| 4 | 
                +  | 
            |
| 3 | 5 | 
                import pngquant  | 
            
| 4 | 6 | 
                import qiniu  | 
            
| 5 | 7 | 
                from django.conf import settings  | 
            
| 8 | 
                +from django_file_md5 import calculate_data_md5  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                +from utils.thumbnail_utils import make_thumbnail2  | 
            |
| 6 | 11 | 
                 | 
            
| 7 | 12 | 
                 | 
            
| 8 | 13 | 
                QINIU = settings.QINIU  | 
            
                @@ -10,34 +15,46 @@ auth = qiniu.Auth(QINIU['access_key'], QINIU['secret_key'])  | 
            ||
| 10 | 15 | 
                pngquant.config(settings.PNG_QUANT_FILE)  | 
            
| 11 | 16 | 
                 | 
            
| 12 | 17 | 
                 | 
            
| 13 | 
                -def upload(data, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):  | 
            |
| 18 | 
                +def generate_new_key(key, data):  | 
            |
| 19 | 
                +    # key = re.sub(r"(.+/)(.+)\.(.+)", lambda m: '{}{}.{}'.format(m.group(1), calculate_data_md5(data), m.group(3)), key)
               | 
            |
| 20 | 
                + sections = re.split(r'/|\.', key)  | 
            |
| 21 | 
                + base_path, ext = '/'.join(sections[:-2]), sections[-1]  | 
            |
| 22 | 
                +    return '{}{}{}.{}'.format(base_path, base_path and '/', calculate_data_md5(data), ext)
               | 
            |
| 23 | 
                +  | 
            |
| 24 | 
                +  | 
            |
| 25 | 
                +def upload(data, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True, thumbnail=True, thumbnailw=1080, thumbnailh=720):  | 
            |
| 14 | 26 | 
                if not data:  | 
            
| 15 | 27 | 
                return ''  | 
            
| 28 | 
                + if thumbnail:  | 
            |
| 29 | 
                + w, h = thumbnailw or 1080, thumbnailh or 720  | 
            |
| 30 | 
                + data = make_thumbnail2(data, w=w, h=h)  | 
            |
| 16 | 31 | 
                if compress:  | 
            
| 17 | 32 | 
                try:  | 
            
| 18 | 33 | 
                data = pngquant.quant_data(data, ndeep=3)[1]  | 
            
| 19 | 34 | 
                except Exception as e:  | 
            
| 20 | 35 | 
                pass  | 
            
| 36 | 
                + if (thumbnail or compress) and key:  | 
            |
| 37 | 
                + key = generate_new_key(key, data)  | 
            |
| 21 | 38 | 
                token = auth.upload_token(bucket, key=key)  | 
            
| 22 | 39 | 
                ret, _ = qiniu.put_data(token, key, data, mime_type=mime_type)  | 
            
| 23 | 40 | 
                     return ret.get('key')
               | 
            
| 24 | 41 | 
                 | 
            
| 25 | 42 | 
                 | 
            
| 26 | 
                -def upload_file_admin(obj, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):  | 
            |
| 43 | 
                +def upload_file_admin(obj, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True, thumbnail=True, thumbnailw=1080, thumbnailh=720):  | 
            |
| 27 | 44 | 
                # Django Admin Upload  | 
            
| 28 | 45 | 
                if not obj.image:  | 
            
| 29 | 46 | 
                return ''  | 
            
| 30 | 47 | 
                obj.image.seek(0)  | 
            
| 31 | 
                - return upload(obj.image.read(), key=key or obj.image.name, mime_type=mime_type, bucket=bucket, compress=compress)  | 
            |
| 48 | 
                + return upload(obj.image.read(), key=key or obj.image.name, mime_type=mime_type, bucket=bucket, compress=compress, thumbnail=thumbnail, thumbnailw=thumbnailw, thumbnailh=thumbnailh)  | 
            |
| 32 | 49 | 
                 | 
            
| 33 | 50 | 
                 | 
            
| 34 | 
                -def upload_file_req(file, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):  | 
            |
| 51 | 
                +def upload_file_req(file, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True, thumbnail=True, thumbnailw=1080, thumbnailh=720):  | 
            |
| 35 | 52 | 
                     # photo = request.FILES.get('photo', '')
               | 
            
| 36 | 53 | 
                # <InMemoryUploadedFile: photo.png (image/png)>  | 
            
| 37 | 54 | 
                if not file:  | 
            
| 38 | 55 | 
                return ''  | 
            
| 39 | 56 | 
                file.seek(0)  | 
            
| 40 | 
                - return upload(file.read(), key=key or file.name, mime_type=mime_type, bucket=bucket, compress=compress)  | 
            |
| 57 | 
                + return upload(file.read(), key=key or file.name, mime_type=mime_type, bucket=bucket, compress=compress, thumbnail=thumbnail, thumbnailw=thumbnailw, thumbnailh=thumbnailh)  | 
            |
| 41 | 58 | 
                 | 
            
| 42 | 59 | 
                 | 
            
| 43 | 60 | 
                def upload_file_path(path, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):  |